package com.woniu.teachmall.service.service;

import com.woniu.teachmall.entity.Admin;
import com.woniu.teachmall.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * 管理员服务代理实现类
 * 采用代理模式增强原有服务功能，实现日志记录等横切关注点
 * 遵循开闭原则扩展系统功能，不修改原有业务逻辑
 */
@Service
public class AdminServiceProxy implements AdminService {
    // 注入实际业务实现（通过qualifier指定具体实现）
    @Autowired
    @Qualifier("adminserviceimpl")
    private AdminService adminService;

    // 日志记录服务依赖
    @Autowired
    private LogService logService;

    /**
     * 带日志记录的登录代理方法
     * @param account 管理员账号
     * @param password 明文密码
     * @return 登录成功返回管理员对象，失败返回null
     * @implNote 1.控制台输出代理标识 2.记录成功操作日志
     */
    @Override
    public Admin login(String account, String password) {
        System.out.println("代理者模式：管理者登录"); // 代理模式演示输出
        // 委托实际服务完成登录验证
        Admin admin = adminService.login(account, password);
        // 成功时记录操作日志
        if (admin != null) {
            logService.logOperation("admin","登录","",true,"");
            return admin;
        } else {
            // 失败情况可根据需求扩展日志记录
            return null;
        }
    }

    /**
     * 带日志记录的用户查询代理方法
     * @return 全部用户列表
     * @implNote 1.记录数据查询操作日志 2.委托实际服务获取数据
     */
    @Override
    public List<User> getAllUser() {
        logService.logOperation("admin","获取所有用户","",true,"");
        return adminService.getAllUser();
    }
}